Previous: Advanced Scoring, Up: Scoring [Contents][Index]
You may find that your scores have a tendency to grow without bounds, especially if you’re using adaptive scoring. If scores get too big, they lose all meaning—they simply max out and it’s difficult to use them in any sensible way.
Gnus provides a mechanism for decaying scores to help with
this problem. When score files are loaded and
gnus-decay-scores is non-nil, Gnus will
run the score files through the decaying mechanism thereby
lowering the scores of all non-permanent score rules. If
gnus-decay-scores is a regexp, only score files
matching this regexp are treated. E.g., you may set it to
‘\\.ADAPT\\'’ if only adaptive
score files should be decayed. The decay itself if performed by
the gnus-decay-score-function function, which is
gnus-decay-score by default. Here’s the
definition of that function:
(defun gnus-decay-score (score)
"Decay SCORE according to `gnus-score-decay-constant'
and `gnus-score-decay-scale'."
(let ((n (- score
(* (if (< score 0) -1 1)
(min (abs score)
(max gnus-score-decay-constant
(* (abs score)
gnus-score-decay-scale)))))))
(if (and (featurep 'xemacs)
;; XEmacs's floor can handle only the floating point
;; number below the half of the maximum integer.
(> (abs n) (lsh -1 -2)))
(string-to-number
(car (split-string (number-to-string n) "\\.")))
(floor n))))
gnus-score-decay-constant is 3 by default and
gnus-score-decay-scale is 0.05. This should cause
the following:
If you don’t like this decay function, write your own. It is called with the score to be decayed as its only parameter, and it should return the new score, which should be an integer.
Gnus will try to decay scores once a day. If you haven’t run Gnus for four days, Gnus will decay the scores four times, for instance.
Previous: Advanced Scoring, Up: Scoring [Contents][Index]